-
Notifications
You must be signed in to change notification settings - Fork 35
/
rbldap.h
207 lines (173 loc) · 5.54 KB
/
rbldap.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
/*
* rbldap.h
* $Id: rbldap.h,v 1.17 2006/08/09 11:23:04 ianmacd Exp $
*/
#ifndef RB_LDAP_H
#define RB_LDAP_H 1
#ifdef USE_WLDAP32
# ifdef HAVE_WINLBER_H
# include "winlber.h"
# endif
# include "winldap.h"
#else
# include <lber.h>
# include <ldap.h>
#endif
#ifdef HAVE_LDAP_SSL_H
#include <ldap_ssl.h>
#endif
#ifndef LDAP_OPT_SUCCESS
# define LDAP_OPT_SUCCESS (0)
# define LDAP_OPT_ERROR (-1)
#endif
#define RB_LDAP_MAJOR_VERSION 0
#define RB_LDAP_MINOR_VERSION 9
#define RB_LDAP_PATCH_VERSION 20
#define RB_LDAP_VERSION "0.9.20"
#define LDAP_GET_OPT_MAX_BUFFER_SIZE (1024) /* >= sizeof(LDAPAPIInfo) */
#define RB_LDAP_SET_STR(var,val) {\
Check_Type(val, T_STRING); \
var = ALLOC_N(char, RSTRING_LEN(val) + 1); \
memcpy(var, RSTRING_PTR(val), RSTRING_LEN(val) + 1); \
}
#if defined(HAVE_LDAP_SEARCH_EXT_S)
# define HAVE_LDAPCONTROL
#endif
typedef struct rb_ldap_data
{
LDAP *ldap;
int bind;
int err;
} RB_LDAP_DATA;
#define RLDAP_DATA_PTR(obj) ((RB_LDAP_DATA*)DATA_PTR(obj))
typedef struct rb_ldapentry_data
{
LDAP *ldap;
LDAPMessage *msg;
#if RUBY_VERSION_CODE >= 190
VALUE dn;
VALUE attr;
#endif
} RB_LDAPENTRY_DATA;
typedef struct rb_ldapmod_data
{
LDAPMod *mod;
} RB_LDAPMOD_DATA;
struct timeval rb_time_interval(VALUE num);
#ifndef HAVE_LDAP_MEMFREE
# define ldap_memfree(ptr) free(ptr)
#endif
extern VALUE rb_mLDAP;
extern VALUE rb_sLDAP_APIInfo;
extern VALUE rb_cLDAP_Controls;
extern VALUE rb_cLDAP_Conn;
extern VALUE rb_cLDAP_SSLConn;
extern VALUE rb_cLDAP_Entry;
extern VALUE rb_cLDAP_Mod;
extern VALUE rb_eLDAP_Error;
extern VALUE rb_eLDAP_ResultError;
extern VALUE rb_eLDAP_InvalidDataError;
extern VALUE rb_eLDAP_InvalidEntryError;
#ifdef LDAP_OPT_API_INFO
VALUE rb_ldap_apiinfo_new (LDAPAPIInfo *);
LDAPAPIInfo *rb_ldap_get_apiinfo (VALUE);
#endif /* LDAP_OPT_API_INFO */
#ifdef HAVE_LDAPCONTROL
VALUE rb_ldap_control_new (LDAPControl *);
LDAPControl *rb_ldap_get_control (VALUE);
LDAPControl **rb_ldap_get_controls (VALUE);
void rb_ldap_free_controls (LDAPControl ** ctrls);
#endif
VALUE rb_ldap_class_new (int, VALUE[], VALUE);
VALUE rb_ldap_dummy_method (int, VALUE[], VALUE);
VALUE rb_ldap_err2string (VALUE, VALUE);
VALUE rb_ldap_dn2ufn (VALUE, VALUE);
VALUE rb_ldap_hash2mods (VALUE, VALUE, VALUE);
VALUE rb_ldap_entry2hash (VALUE, VALUE);
VALUE rb_ldap_conn_new (VALUE, LDAP *);
VALUE rb_ldap_conn_simple_bind_s (int, VALUE[], VALUE);
VALUE rb_ldap_conn_bind_s (int, VALUE[], VALUE);
VALUE rb_ldap_conn_start_tls_s (int, VALUE[], VALUE);
VALUE rb_ldap_conn_unbind (VALUE);
VALUE rb_ldap_conn_set_option (VALUE, VALUE, VALUE);
VALUE rb_ldap_conn_get_option (VALUE, VALUE);
VALUE rb_ldap_conn_perror (VALUE, VALUE);
VALUE rb_ldap_conn_result2error (VALUE, VALUE);
VALUE rb_ldap_conn_err2string (VALUE, VALUE);
VALUE rb_ldap_conn_search_s (int, VALUE[], VALUE);
VALUE rb_ldap_conn_search2_s (int, VALUE[], VALUE);
VALUE rb_ldap_conn_add_s (VALUE, VALUE, VALUE);
VALUE rb_ldap_conn_modify_s (VALUE, VALUE, VALUE);
VALUE rb_ldap_conn_modrdn_s (VALUE, VALUE, VALUE, VALUE);
VALUE rb_ldap_conn_delete_s (VALUE, VALUE);
VALUE rb_ldap_conn_err (VALUE);
VALUE rb_ldap_conn_set_sort (VALUE, VALUE, VALUE);
VALUE rb_ldap_conn_get_sort (VALUE);
VALUE rb_ldap_saslconn_bind (int, VALUE[], VALUE);
VALUE rb_ldap_entry_new (LDAP *, LDAPMessage *);
VALUE rb_ldap_entry_get_dn (VALUE self);
VALUE rb_ldap_entry_get_values (VALUE, VALUE);
VALUE rb_ldap_entry_get_attributes (VALUE);
VALUE rb_ldap_entry_to_hash (VALUE);
VALUE rb_ldap_mod_new (int, char *, char **);
VALUE rb_ldap_mod_new2 (int, char *, struct berval **);
VALUE rb_ldap_mod_op (VALUE);
VALUE rb_ldap_mod_type (VALUE);
VALUE rb_ldap_mod_vals (VALUE);
#define Check_Kind(obj,klass) {\
if(!rb_obj_is_kind_of(obj,klass))\
rb_raise(rb_eTypeError,"type mismatch");\
};
#define Check_LDAP_Result(err) { \
if( (err) != LDAP_SUCCESS && (err) != LDAP_SIZELIMIT_EXCEEDED ){ \
rb_raise(rb_eLDAP_ResultError, "%s", ldap_err2string(err)); \
} \
}
#define Check_LDAP_OPT_Result(err) { \
if( (err) != LDAP_OPT_SUCCESS ){ \
rb_raise(rb_eLDAP_ResultError, "%s", ldap_err2string(err)); \
} \
}
#define GET_LDAP_DATA(obj,ptr) {\
Data_Get_Struct(obj, struct rb_ldap_data, ptr); \
if( ! ptr->ldap ){ \
rb_raise(rb_eLDAP_InvalidDataError, "The LDAP handler has already unbound.");\
} \
}
#define Check_LDAPENTRY(obj) {\
RB_LDAPENTRY_DATA *ptr; \
Data_Get_Struct(obj, struct rb_ldapentry_data, ptr); \
if( ! ptr->msg ){ \
VALUE value = rb_inspect(obj); \
rb_raise(rb_eLDAP_InvalidEntryError, "%s is not a valid entry", \
StringValuePtr(value)); \
}; \
}
#if RUBY_VERSION_CODE < 190
#define GET_LDAPENTRY_DATA(obj,ptr) { \
Data_Get_Struct(obj, struct rb_ldapentry_data, ptr); \
if( ! ptr->msg ){ \
VALUE value = rb_inspect(obj); \
rb_raise(rb_eLDAP_InvalidEntryError, "%s is not a valid entry", \
StringValuePtr(value)); \
}; \
}
#else
#define GET_LDAPENTRY_DATA(obj,ptr) { \
Data_Get_Struct(obj, struct rb_ldapentry_data, ptr); \
}
#endif
#define GET_LDAPMOD_DATA(obj,ptr) {\
Data_Get_Struct(obj, struct rb_ldapmod_data, ptr); \
if( ! ptr->mod ) \
rb_raise(rb_eLDAP_InvalidDataError, "The Mod data is not ready for use."); \
}
#define rb_ldap_define_class(cname,parent) \
rb_define_class_under(rb_mLDAP,cname,parent)
#define rb_ldap_conn_define_method(method,cfunc,argc) \
rb_define_method(rb_cLDAP_Conn,method,cfunc,argc)
#define rb_ldap_entry_define_method(method,cfunc,argc) \
rb_define_method(rb_cLDAP_Entry,method,cfunc,argc)
#define rb_ldap_mod_define_method(method,cfunc,argc) \
rb_define_method(rb_cLDAP_Mod,method,cfunc,argc)
#endif