--- ~/mod_authn_dbd.c Fri Mar 17 07:50:01 2006 +++ modules/aaa/mod_authn_dbd.c Fri Mar 17 07:51:24 2006 @@ -37,7 +37,7 @@ /* optional function - look it up once in post_config */ static ap_dbd_t *(*authn_dbd_acquire_fn)(request_rec*) = NULL; -static void (*authn_dbd_prepare_fn)(server_rec*, const char*, const char*) = NULL; +static apr_status_t (*authn_dbd_prepare_fn)(server_rec*, const char*, const char*) = NULL; static void *authn_dbd_cr_conf(apr_pool_t *pool, char *dummy) { @@ -67,7 +67,9 @@ } label = apr_psprintf(cmd->pool, "authn_dbd_%d", ++label_num); - authn_dbd_prepare_fn(cmd->server, query, label); + if (authn_dbd_prepare_fn(cmd->server, query, label) != APR_SUCCESS) { + return "You must configure mod_dbd to enable AuthDBD functions"; + } /* save the label here for our own use */ return ap_set_string_slot(cmd, cfg, label); --- ~/mod_dbd.h Fri Mar 17 07:50:16 2006 +++ modules/database/mod_dbd.h Fri Mar 17 07:52:10 2006 @@ -90,14 +90,14 @@ * the server startup/configuration phase. Can't be called * after the server has created its children (use apr_dbd_*). */ -DBD_DECLARE_NONSTD(void) ap_dbd_prepare(server_rec*, const char*, const char*); +DBD_DECLARE_NONSTD(apr_status_t) ap_dbd_prepare(server_rec*, const char*, const char*); /* Also export them as optional functions for modules that prefer it */ APR_DECLARE_OPTIONAL_FN(ap_dbd_t*, ap_dbd_open, (apr_pool_t*, server_rec*)); APR_DECLARE_OPTIONAL_FN(void, ap_dbd_close, (server_rec*, ap_dbd_t*)); APR_DECLARE_OPTIONAL_FN(ap_dbd_t*, ap_dbd_acquire, (request_rec*)); APR_DECLARE_OPTIONAL_FN(ap_dbd_t*, ap_dbd_cacquire, (conn_rec*)); -APR_DECLARE_OPTIONAL_FN(void, ap_dbd_prepare, (server_rec*, const char*, const char*)); +APR_DECLARE_OPTIONAL_FN(apr_status_t, ap_dbd_prepare, (server_rec*, const char*, const char*)); #endif /** @} */ --- ~/mod_dbd.c Fri Mar 17 07:50:15 2006 +++ modules/database/mod_dbd.c Fri Mar 17 07:53:58 2006 @@ -139,20 +139,30 @@ } return NULL; } -DBD_DECLARE_NONSTD(void) ap_dbd_prepare(server_rec *s, const char *query, +DBD_DECLARE_NONSTD(apr_status_t) ap_dbd_prepare(server_rec *s, const char *query, const char *label) { svr_cfg *svr = ap_get_module_config(s->module_config, &dbd_module); - dbd_prepared *prepared = apr_pcalloc(s->process->pool, sizeof(dbd_prepared)); + dbd_prepared *prepared; + + if (svr == NULL) { + return -1; + } + + prepared = apr_pcalloc(s->process->pool, sizeof(dbd_prepared)); prepared->label = label; prepared->query = query; prepared->next = svr->prepared; svr->prepared = prepared; + + return APR_SUCCESS; } static const char *dbd_prepare(cmd_parms *cmd, void *cfg, const char *query, const char *label) { - ap_dbd_prepare(cmd->server, query, label); + if (ap_dbd_prepare(cmd->server, query, label) != APR_SUCCESS) { + return "You must configure mod_dbd to use DBDPrepareSQL"; + } return NULL; } static const command_rec dbd_cmds[] = {