db-ldap.h revision 965ed6ea3fc8f7637bd0d159d2fdb283a191ce34
7cb128dc4cae2a03a742f63ba7afee23c78e3af0Phil Carmody#ifndef __DB_LDAP_H
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainen#define __DB_LDAP_H
08d6658a4e2ec8104cd1307f6baa75fdb07a24f8Mark Washenberger
d5abbb932a0a598f002da39a8b3326643b1b5efcTimo Sirainen#include <ldap.h>
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainen
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainenstruct ldap_connection;
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainenstruct ldap_request;
35136dd2baf8dc30e4e754294ed81ff48e8c1e64Timo Sirainen
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainentypedef void db_search_callback_t(struct ldap_connection *conn,
e4d34f2fbee451219599d71505594df704093ce3Timo Sirainen struct ldap_request *request,
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainen LDAPMessage *res);
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainen
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainenstruct ldap_settings {
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainen const char *hosts;
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainen const char *user;
b321df9603081896b70ec44635af96d674a9839aTimo Sirainen const char *pass;
b321df9603081896b70ec44635af96d674a9839aTimo Sirainen const char *deref;
b321df9603081896b70ec44635af96d674a9839aTimo Sirainen const char *base;
b321df9603081896b70ec44635af96d674a9839aTimo Sirainen const char *attrs;
b321df9603081896b70ec44635af96d674a9839aTimo Sirainen const char *filter;
e4d34f2fbee451219599d71505594df704093ce3Timo Sirainen
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainen int ldap_deref;
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainen};
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainen
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainenstruct ldap_connection {
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainen pool_t pool;
35136dd2baf8dc30e4e754294ed81ff48e8c1e64Timo Sirainen int refcount;
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainen
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainen char *config_path;
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainen struct ldap_settings set;
e4d34f2fbee451219599d71505594df704093ce3Timo Sirainen
e4d34f2fbee451219599d71505594df704093ce3Timo Sirainen LDAP *ld;
c02a056b724abd6578fb8c4e439de0e94eaea6feTimo Sirainen struct io *io;
9f431ccfb6932746db56245c8a3d3415717ef545Timo Sirainen struct hash_table *requests;
b321df9603081896b70ec44635af96d674a9839aTimo Sirainen
b321df9603081896b70ec44635af96d674a9839aTimo Sirainen unsigned int connected:1;
c02a056b724abd6578fb8c4e439de0e94eaea6feTimo Sirainen};
c02a056b724abd6578fb8c4e439de0e94eaea6feTimo Sirainen
c02a056b724abd6578fb8c4e439de0e94eaea6feTimo Sirainenstruct ldap_request {
e4d34f2fbee451219599d71505594df704093ce3Timo Sirainen db_search_callback_t *callback;
c02a056b724abd6578fb8c4e439de0e94eaea6feTimo Sirainen void *context;
c02a056b724abd6578fb8c4e439de0e94eaea6feTimo Sirainen};
c02a056b724abd6578fb8c4e439de0e94eaea6feTimo Sirainen
c02a056b724abd6578fb8c4e439de0e94eaea6feTimo Sirainenvoid db_ldap_search(struct ldap_connection *conn, const char *base, int scope,
b4f35fa953a95e4d06fdae54d394095073fcfea0Timo Sirainen const char *filter, char **attributes,
b4f35fa953a95e4d06fdae54d394095073fcfea0Timo Sirainen struct ldap_request *request);
b4f35fa953a95e4d06fdae54d394095073fcfea0Timo Sirainen
b4f35fa953a95e4d06fdae54d394095073fcfea0Timo Sirainenvoid db_ldap_set_attrs(struct ldap_connection *conn, const char *value,
b4f35fa953a95e4d06fdae54d394095073fcfea0Timo Sirainen unsigned int **attrs, char ***attr_names);
31e7be5e1d41a77f08d26cef46aba1df24b3f1baTimo Sirainen
b321df9603081896b70ec44635af96d674a9839aTimo Sirainenstruct ldap_connection *db_ldap_init(const char *config_path);
31e7be5e1d41a77f08d26cef46aba1df24b3f1baTimo Sirainenvoid db_ldap_unref(struct ldap_connection *conn);
c02a056b724abd6578fb8c4e439de0e94eaea6feTimo Sirainen
c02a056b724abd6578fb8c4e439de0e94eaea6feTimo Sirainen#endif
c02a056b724abd6578fb8c4e439de0e94eaea6feTimo Sirainen