34 #include <stdlib.h> |
34 #include <stdlib.h> |
35 #include <string.h> |
35 #include <string.h> |
36 |
36 |
37 #include "ldap_auth.h" |
37 #include "ldap_auth.h" |
38 |
38 |
|
39 static void ws_ldap_close(LDAP *ldap) { |
|
40 #ifdef SOLARIS |
|
41 ldap_unbind(ldap); |
|
42 #else |
|
43 ldap_unbind_ext_s(ld, NULL, NULL); |
|
44 #endif |
|
45 } |
|
46 |
39 AuthDB* create_ldap_authdb(char *name, LDAPConfig *conf) { |
47 AuthDB* create_ldap_authdb(char *name, LDAPConfig *conf) { |
40 LDAPAuthDB *authdb = malloc(sizeof(LDAPAuthDB)); |
48 LDAPAuthDB *authdb = malloc(sizeof(LDAPAuthDB)); |
41 authdb->authdb.name = strdup(name); |
49 authdb->authdb.name = strdup(name); |
42 authdb->authdb.get_user = ldap_get_user; |
50 authdb->authdb.get_user = ldap_get_user; |
43 authdb->authdb.use_cache = 1; |
51 authdb->authdb.use_cache = 1; |
120 NULL, // client controls |
128 NULL, // client controls |
121 &timeout, |
129 &timeout, |
122 1, // size limit |
130 1, // size limit |
123 &result); |
131 &result); |
124 if (r != LDAP_SUCCESS) { |
132 if (r != LDAP_SUCCESS) { |
125 //ldap_unbind(ld); |
133 ws_ldap_close(ld); |
126 ldap_unbind_ext_s(ld, NULL, NULL); |
134 |
127 fprintf(stderr, "ldap_search_ext_s failed\n"); |
135 fprintf(stderr, "ldap_search_ext_s failed\n"); |
128 return NULL; |
136 return NULL; |
129 } |
137 } |
130 |
138 |
131 LDAPMessage *msg = ldap_first_entry(ld, result); |
139 LDAPMessage *msg = ldap_first_entry(ld, result); |
186 |
194 |
187 void ldap_user_free(User *u) { |
195 void ldap_user_free(User *u) { |
188 LDAPUser *user = (LDAPUser*)u; |
196 LDAPUser *user = (LDAPUser*)u; |
189 ldap_memfree(user->userdn); |
197 ldap_memfree(user->userdn); |
190 // TODO: use connection pool |
198 // TODO: use connection pool |
191 //ldap_unbind(user->ldap); |
199 ws_ldap_close(user->ldap); |
192 ldap_unbind_ext_s(user->ldap, NULL, NULL); |
|
193 free(user); |
200 free(user); |
194 } |
201 } |