xref: /titanic_41/usr/src/cmd/ldap/common/ldaptool.h (revision ed5289f91b9bf164dccd6c75398362be77a4478d)
1 /*
2  * Copyright 2003 Sun Microsystems, Inc.  All rights reserved.
3  * Use is subject to license terms.
4  */
5 
6 #pragma ident	"%Z%%M%	%I%	%E% SMI"
7 
8 /*
9  * The contents of this file are subject to the Netscape Public
10  * License Version 1.1 (the "License"); you may not use this file
11  * except in compliance with the License. You may obtain a copy of
12  * the License at http://www.mozilla.org/NPL/
13  *
14  * Software distributed under the License is distributed on an "AS
15  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
16  * implied. See the License for the specific language governing
17  * rights and limitations under the License.
18  *
19  * The Original Code is Mozilla Communicator client code, released
20  * March 31, 1998.
21  *
22  * The Initial Developer of the Original Code is Netscape
23  * Communications Corporation. Portions created by Netscape are
24  * Copyright (C) 1998-1999 Netscape Communications Corporation. All
25  * Rights Reserved.
26  *
27  * Contributor(s):
28  */
29 
30 #ifndef _LDAPTOOL_H
31 #define _LDAPTOOL_H
32 
33 /* XXX:mhein The following is a workaround for the redefinition of */
34 /*           const problem on OSF.  Fix to be provided by NSS */
35 /*           This is a pretty benign workaround for us which */
36 /*           should not cause problems in the future even if */
37 /*           we forget to take it out :-) */
38 
39 #ifdef OSF1V4D
40 #ifndef __STDC__
41 #  define __STDC__
42 #endif /* __STDC__ */
43 #endif /* OSF1V4D */
44 
45 #include <stdio.h>
46 #include <stdlib.h>
47 #include <string.h>
48 #include <errno.h>
49 
50 #ifdef AIX
51 #include <strings.h>
52 #endif
53 
54 
55 #ifdef SCOOS
56 #include <sys/types.h>
57 #endif
58 
59 #ifdef _WINDOWS
60 #define WIN32_LEAN_AND_MEAN
61 #include <windows.h>
62 extern int getopt (int argc, char *const *argv, const char *optstring);
63 #include <io.h> /* for _mktemp() */
64 #define	LDAPTOOL_MKTEMP( p )	_mktemp( p )
65 #else
66 #include <sys/file.h>
67 #include <sys/stat.h>
68 #include <unistd.h>
69 #define	LDAPTOOL_MKTEMP( p )	mktemp( p )
70 #endif
71 
72 #ifdef LINUX
73 #include <getopt.h>       /* not always included from unistd.h */
74 #endif
75 
76 #include <ctype.h>
77 
78 #ifndef SCOOS
79 #include <sys/types.h>
80 #endif
81 
82 #include <sys/stat.h>
83 #include <fcntl.h>
84 
85 #ifndef SOLARIS_LDAP_CMD
86 #if defined(NET_SSL)
87 #include <ssl.h>
88 #endif
89 
90 #if defined(NET_SSL)
91 #include <ldap_ssl.h>
92 #endif
93 
94 #ifndef NO_LIBLCACHE
95 #include <lcache.h>
96 #endif
97 
98 #include <ldappr.h>
99 #include <portable.h>
100 #endif	/* SOLARIS_LDAP_CMD */
101 
102 #include <ldap.h>
103 
104 #include <ldaplog.h>
105 #include <ldif.h>
106 
107 
108 #ifdef __cplusplus
109 extern "C" {
110 #endif
111 
112 
113 /*
114  * shared macros, structures, etc.
115  */
116 #define LDAPTOOL_RESULT_IS_AN_ERROR( rc ) \
117 		( (rc) != LDAP_SUCCESS && (rc) != LDAP_COMPARE_TRUE \
118 		&& (rc) != LDAP_COMPARE_FALSE )
119 
120 #define LDAPTOOL_DEFSEP		"="	/* used by ldapcmp and ldapsearch */
121 #define LDAPTOOL_DEFHOST	"localhost"
122 #ifdef SOLARIS_LDAP_CMD
123 #define LDAPTOOL_DEFSSLSTRENGTH LDAPSSL_AUTH_CNCHECK
124 #else
125 #define	LDAPTOOL_DEFSSLSTRENGTH LDAPSSL_AUTH_CERT
126 #endif	/* SOLARIS_LDAP_CMD */
127 #define LDAPTOOL_DEFCERTDBPATH	"."
128 #define LDAPTOOL_DEFKEYDBPATH	"."
129 #define LDAPTOOL_DEFREFHOPLIMIT		5
130 
131 #define LDAPTOOL_SAFEREALLOC( ptr, size )  ( ptr == NULL ? malloc( size ) : \
132 						realloc( ptr, size ))
133 /* this defines the max number of control requests for the tools */
134 #define CONTROL_REQUESTS 50
135 
136 /*
137  * globals (defined in common.c)
138  */
139 extern char		*ldaptool_host;
140 extern char		*ldaptool_host2;
141 extern int		ldaptool_port;
142 extern int		ldaptool_port2;
143 extern int		ldaptool_verbose;
144 extern int		ldaptool_not;
145 #ifdef SOLARIS_LDAP_CMD
146 extern int		ldaptool_require_binddn;
147 #endif	/* SOLARIS_LDAP_CMD */
148 extern char		*ldaptool_progname;
149 extern FILE		*ldaptool_fp;
150 extern char		*ldaptool_charset;
151 extern char		*ldaptool_convdir;
152 extern LDAPControl	*ldaptool_request_ctrls[];
153 
154 
155 /*
156  * function prototypes
157  */
158 void ldaptool_common_usage( int two_hosts );
159 int ldaptool_process_args( int argc, char **argv, char *extra_opts,
160 	int two_hosts, void (*extra_opt_callback)( int option, char *optarg ));
161 LDAP *ldaptool_ldap_init( int second_host );
162 void ldaptool_bind( LDAP *ld );
163 void ldaptool_cleanup( LDAP *ld );
164 int ldaptool_print_lderror( LDAP *ld, char *msg, int check4ssl );
165 #define LDAPTOOL_CHECK4SSL_NEVER	0
166 #define LDAPTOOL_CHECK4SSL_ALWAYS	1
167 #define LDAPTOOL_CHECK4SSL_IF_APPROP	2	/* if appropriate */
168 LDAPControl *ldaptool_create_manage_dsait_control( void );
169 void ldaptool_print_referrals( char **refs );
170 int ldaptool_print_extended_response( LDAP *ld, LDAPMessage *res, char *msg );
171 LDAPControl *ldaptool_create_proxyauth_control( LDAP *ld );
172 LDAPControl *ldaptool_create_geteffectiveRights_control ( LDAP *ld,
173 													const char *authzid,
174 													const char **attrlist );
175 void ldaptool_add_control_to_array( LDAPControl *ctrl, LDAPControl **array);
176 void ldaptool_reset_control_array( LDAPControl **array );
177 char *ldaptool_get_tmp_dir( void );
178 char *ldaptool_local2UTF8( const char * );
179 #ifdef SOLARIS_LDAP_CMD
180 char *ldaptool_UTF82local( const char * );
181 #endif	/* SOLARIS_LDAP_CMD */
182 int ldaptool_berval_is_ascii( const struct berval *bvp );
183 int ldaptool_sasl_bind_s( LDAP *ld, const char *dn, const char *mechanism,
184         const struct berval *cred, LDAPControl **serverctrls,
185         LDAPControl **clientctrls, struct berval **servercredp, char *msg );
186 int ldaptool_simple_bind_s( LDAP *ld, const char *dn, const char *passwd,
187 	LDAPControl **serverctrls, LDAPControl **clientctrls, char *msg );
188 int ldaptool_add_ext_s( LDAP *ld, const char *dn, LDAPMod **attrs,
189         LDAPControl **serverctrls, LDAPControl **clientctrls, char *msg );
190 int ldaptool_modify_ext_s( LDAP *ld, const char *dn, LDAPMod **mods,
191         LDAPControl **serverctrls, LDAPControl **clientctrls, char *msg );
192 int ldaptool_delete_ext_s( LDAP *ld, const char *dn, LDAPControl **serverctrls,
193         LDAPControl **clientctrls, char *msg );
194 int ldaptool_rename_s(  LDAP *ld, const char *dn, const char *newrdn,
195         const char *newparent, int deleteoldrdn, LDAPControl **serverctrls,
196         LDAPControl **clientctrls, char *msg );
197 int ldaptool_compare_ext_s( LDAP *ld, const char *dn, const char *attrtype,
198 	    const struct berval *bvalue, LDAPControl **serverctrls,
199 	    LDAPControl **clientctrls, char *msg );
200 int ldaptool_boolean_str2value ( const char *s, int strict );
201 int ldaptool_parse_ctrl_arg ( char *ctrl_arg, char sep, char **ctrl_oid,
202 	    int *ctrl_criticality, char **ctrl_value, int *vlen);
203 FILE * ldaptool_open_file(const char *filename, const char *mode);
204 
205 
206 /* Definition for list in ldapdelete.c */
207 
208 typedef struct Element {       /* double-linked list data type */
209     struct Element *right;
210     struct Element *left;
211     char *data;
212 } Element;
213 
214 typedef struct {                /* generic double-linked list head */
215     Element *first;
216     Element *last;
217     long count;
218 } Head;
219 
220 void  L_Init(Head *list);
221 void  L_Insert(Element *Node, Head  *HeadNode);
222 void  L_Remove(Element *Node, Head *HeadNode);
223 
224 #ifdef __cplusplus
225 }
226 #endif
227 
228 #endif /* LDAPTOOL_H */
229