2 * Copyright 1999, Dmitry Kovalev <mit@openldap.org>, All rights reserved.
4 * Redistribution and use in source and binary forms are permitted only
5 * as authorized by the OpenLDAP Public License. A copy of this
6 * license is available at http://www.OpenLDAP.org/license.html or
7 * in file LICENSE in the top-level directory of the distribution.
15 #include <sys/types.h>
19 #include "schema-map.h"
22 #ifdef SLAPD_SQL_DYNAMIC
24 int backsql_LTX_init_module(int argc, char *argv[]) {
27 memset( &bi, '\0', sizeof(bi) );
29 bi.bi_init = backbacksql_initialize;
35 #endif /* SLAPD_SHELL_DYNAMIC */
37 int sql_back_initialize(
41 Debug(LDAP_DEBUG_TRACE,"==>backsql_initialize()\n",0,0,0);
47 bi->bi_db_init = backsql_db_init;
48 bi->bi_db_config = backsql_db_config;
49 bi->bi_db_open = backsql_db_open;
50 bi->bi_db_close = backsql_db_close;
51 bi->bi_db_destroy = backsql_db_destroy;
54 #ifdef BACKSQL_ALL_DONE
55 bi->bi_op_abandon = backsql_abandon;
56 bi->bi_op_compare = backsql_compare;
58 bi->bi_op_abandon = 0;
59 bi->bi_op_compare = 0;
61 bi->bi_op_bind = backsql_bind;
62 bi->bi_op_unbind = backsql_unbind;
63 bi->bi_op_search = backsql_search;
64 bi->bi_op_modify = backsql_modify;
65 bi->bi_op_modrdn = backsql_modrdn;
66 bi->bi_op_add = backsql_add;
67 bi->bi_op_delete = backsql_delete;
70 bi->bi_acl_attribute = 0;
71 bi->bi_chk_referrals = 0;
73 bi->bi_connection_init = 0;
74 bi->bi_connection_destroy = backsql_connection_destroy;
76 Debug(LDAP_DEBUG_TRACE,"<==backsql_initialize()\n",0,0,0);
81 int backsql_destroy ( BackendInfo *bi )
83 Debug(LDAP_DEBUG_TRACE,"==>backsql_destroy()\n",0,0,0);
84 Debug(LDAP_DEBUG_TRACE,"<==backsql_destroy()\n",0,0,0);
88 int backsql_db_init(BackendDB *bd)
92 Debug(LDAP_DEBUG_TRACE,"==>backsql_db_init()\n",0,0,0);
93 si = (backsql_info *) ch_calloc( 1, sizeof(backsql_info) );
94 ldap_pvt_thread_mutex_init(&si->dbconn_mutex);
95 ldap_pvt_thread_mutex_init(&si->schema_mutex);
96 backsql_init_db_env(si);
99 Debug(LDAP_DEBUG_TRACE,"<==backsql_db_init()\n",0,0,0);
103 int backsql_db_destroy(BackendDB *bd)
105 backsql_info *si=(backsql_info*)bd->be_private;
107 Debug(LDAP_DEBUG_TRACE,"==>backsql_db_destroy()\n",0,0,0);
108 ldap_pvt_thread_mutex_lock(&si->dbconn_mutex);
109 backsql_free_db_env(si);
110 ldap_pvt_thread_mutex_unlock(&si->dbconn_mutex);
111 ldap_pvt_thread_mutex_lock(&si->schema_mutex);
112 backsql_destroy_schema_map(si);
113 ldap_pvt_thread_mutex_unlock(&si->schema_mutex);
114 ldap_pvt_thread_mutex_destroy(&si->schema_mutex);
115 ldap_pvt_thread_mutex_destroy(&si->dbconn_mutex);
123 free(si->upper_func);
124 free(si->subtree_cond);
127 free(si->insentry_query);
128 free(si->delentry_query);
130 Debug(LDAP_DEBUG_TRACE,"<==backsql_db_destroy()\n",0,0,0);
134 int backsql_db_open (BackendDB *bd)
136 backsql_info *si=(backsql_info*)bd->be_private;
141 Debug(LDAP_DEBUG_TRACE,"==>backsql_db_open(): testing RDBMS connection\n",0,0,0);
142 if (si->dbname==NULL)
144 Debug(LDAP_DEBUG_TRACE,"backsql_db_open(): datasource name not specified (use dbname directive in slapd.conf)\n",0,0,0);
147 if (si->dbuser==NULL)
149 Debug(LDAP_DEBUG_TRACE,"backsql_db_open(): user name not specified (use dbuser directive in slapd.conf)\n",0,0,0);
152 if (si->subtree_cond==NULL)
154 Debug(LDAP_DEBUG_TRACE,"backsql_db_open(): subtree search SQL condition not specified (use subtree_cond directive in slapd.conf)\n",0,0,0);
155 Debug(LDAP_DEBUG_TRACE,"backsql_db_open(): setting '%s' as default\n",backsql_def_subtree_cond,0,0);
156 si->subtree_cond=ch_strdup(backsql_def_subtree_cond);
158 if (si->oc_query==NULL)
160 Debug(LDAP_DEBUG_TRACE,"backsql_db_open(): objectclass mapping SQL statement not specified (use oc_query directive in slapd.conf)\n",0,0,0);
161 Debug(LDAP_DEBUG_TRACE,"backsql_db_open(): setting '%s' by default\n",backsql_def_oc_query,0,0);
162 si->oc_query=ch_strdup(backsql_def_oc_query);
164 if (si->at_query==NULL)
166 Debug(LDAP_DEBUG_TRACE,"backsql_db_open(): attribute mapping SQL statement not specified (use at_query directive in slapd.conf)\n",0,0,0);
167 Debug(LDAP_DEBUG_TRACE,"backsql_db_open(): setting '%s' by default\n",backsql_def_at_query,0,0);
168 si->at_query=ch_strdup(backsql_def_at_query);
170 if (si->insentry_query==NULL)
172 Debug(LDAP_DEBUG_TRACE,"backsql_db_open(): entry insertion SQL statement not specified (use insentry_query directive in slapd.conf)\n",0,0,0);
173 Debug(LDAP_DEBUG_TRACE,"backsql_db_open(): setting '%s' by default\n",backsql_def_insentry_query,0,0);
174 si->insentry_query=ch_strdup(backsql_def_insentry_query);
176 if (si->delentry_query==NULL)
178 Debug(LDAP_DEBUG_TRACE,"backsql_db_open(): entry deletion SQL statement not specified (use delentry_query directive in slapd.conf)\n",0,0,0);
179 Debug(LDAP_DEBUG_TRACE,"backsql_db_open(): setting '%s' by default\n",backsql_def_delentry_query,0,0);
180 si->delentry_query=ch_strdup(backsql_def_delentry_query);
184 if (si->upper_func==NULL)
186 si->id_query=backsql_strcat(si->id_query,&idq_len,backsql_id_query,"dn=?",NULL);
190 si->id_query=backsql_strcat(si->id_query,&idq_len,backsql_id_query,si->upper_func,"(dn)=",si->upper_func,"(?)",NULL);
193 dbh=backsql_get_db_conn(bd,&tmp);
196 Debug(LDAP_DEBUG_TRACE,"backsql_db_open(): connection failed, exiting\n",0,0,0);
199 backsql_free_db_conn(bd,&tmp);
200 if (!si->schema_loaded)
202 Debug(LDAP_DEBUG_TRACE,"backsql_db_open(): test failed, schema map not loaded - exiting\n",0,0,0);
205 Debug(LDAP_DEBUG_TRACE,"<==backsql_db_open(): test succeeded, schema map loaded\n",0,0,0);
209 int backsql_db_close(BackendDB *bd)
211 Debug(LDAP_DEBUG_TRACE,"==>backsql_db_close()\n",0,0,0);
212 Debug(LDAP_DEBUG_TRACE,"<==backsql_db_close()\n",0,0,0);
216 int backsql_connection_destroy(BackendDB *be,Connection *conn)
218 Debug(LDAP_DEBUG_TRACE,"==>backsql_connection_destroy()\n",0,0,0);
219 backsql_free_db_conn(be,conn);
220 Debug(LDAP_DEBUG_TRACE,"<==backsql_connection_destroy()\n",0,0,0);
224 #endif /* SLAPD_SQL */