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