src/server/daemon/ldap_auth.c

changeset 89
5eecce5314d6
parent 87
bdec069d2239
child 91
fac51f87def0
equal deleted inserted replaced
88:73b3485e96f1 89:5eecce5314d6
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;
90 &cred, 98 &cred,
91 NULL, 99 NULL,
92 NULL, 100 NULL,
93 &server_cred); 101 &server_cred);
94 if (r != LDAP_SUCCESS) { 102 if (r != LDAP_SUCCESS) {
95 //ldap_unbind(ld); 103 ws_ldap_close(ld);
96 ldap_unbind_ext_s(ld, NULL, NULL); 104
97 fprintf(stderr, "ldap_simple_bind_s failed: %s\n", ldap_err2string(r)); 105 fprintf(stderr, "ldap_simple_bind_s failed: %s\n", ldap_err2string(r));
98 return NULL; 106 return NULL;
99 } 107 }
100 108
101 // get the user dn 109 // get the user dn
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);
148 156
149 return (User*)user; 157 return (User*)user;
150 } 158 }
151 } 159 }
152 160
153 ldap_unbind_ext_s(ld, NULL, NULL); 161 ws_ldap_close(ld);
154 return NULL; 162 return NULL;
155 } 163 }
156 164
157 int ldap_user_verify_password(User *u, char *password) { 165 int ldap_user_verify_password(User *u, char *password) {
158 LDAPUser *user = (LDAPUser*)u; 166 LDAPUser *user = (LDAPUser*)u;
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 }

mercurial