| 160 |
|
|
| 161 |
static const char *dbd_param(cmd_parms *cmd, void *dconf, const char *val) |
static const char *dbd_param(cmd_parms *cmd, void *dconf, const char *val) |
| 162 |
{ |
{ |
| 163 |
|
apr_status_t rv; |
| 164 |
const apr_dbd_driver_t *driver = NULL; |
const apr_dbd_driver_t *driver = NULL; |
| 165 |
svr_cfg *svr = ap_get_module_config(cmd->server->module_config, |
svr_cfg *svr = ap_get_module_config(cmd->server->module_config, |
| 166 |
&dbd_module); |
&dbd_module); |
| 173 |
* best done at server startup. This also guarantees that |
* best done at server startup. This also guarantees that |
| 174 |
* we won't return an error later. |
* we won't return an error later. |
| 175 |
*/ |
*/ |
| 176 |
switch (apr_dbd_get_driver(cmd->pool, cfg->name, &driver)) { |
rv = apr_dbd_get_driver(cmd->pool, cfg->name, &driver); |
| 177 |
case APR_ENOTIMPL: |
if (APR_STATUS_IS_ENOTIMPL(rv)) { |
| 178 |
return apr_psprintf(cmd->pool, "DBD: No driver for %s", cfg->name); |
return apr_psprintf(cmd->pool, "DBD: No driver for %s", cfg->name); |
| 179 |
case APR_EDSOOPEN: |
} |
| 180 |
|
else if (APR_STATUS_IS_EDSOOPEN(rv)) { |
| 181 |
return apr_psprintf(cmd->pool, |
return apr_psprintf(cmd->pool, |
| 182 |
#ifdef NETWARE |
#ifdef NETWARE |
| 183 |
"DBD: Can't load driver file dbd%s.nlm", |
"DBD: Can't load driver file dbd%s.nlm", |
| 185 |
"DBD: Can't load driver file apr_dbd_%s.so", |
"DBD: Can't load driver file apr_dbd_%s.so", |
| 186 |
#endif |
#endif |
| 187 |
cfg->name); |
cfg->name); |
| 188 |
case APR_ESYMNOTFOUND: |
} |
| 189 |
|
else if (APR_STATUS_IS_ESYMNOTFOUND(rv)) { |
| 190 |
return apr_psprintf(cmd->pool, |
return apr_psprintf(cmd->pool, |
| 191 |
"DBD: Failed to load driver apr_dbd_%s_driver", |
"DBD: Failed to load driver apr_dbd_%s_driver", |
| 192 |
cfg->name); |
cfg->name); |
| 538 |
*/ |
*/ |
| 539 |
rv = apr_dbd_get_driver(rec->pool, cfg->name, &rec->driver); |
rv = apr_dbd_get_driver(rec->pool, cfg->name, &rec->driver); |
| 540 |
if (rv != APR_SUCCESS) { |
if (rv != APR_SUCCESS) { |
| 541 |
switch (rv) { |
if (APR_STATUS_IS_ENOTIMPL(rv)) { |
|
case APR_ENOTIMPL: |
|
| 542 |
ap_log_error(APLOG_MARK, APLOG_ERR, rv, cfg->server, |
ap_log_error(APLOG_MARK, APLOG_ERR, rv, cfg->server, |
| 543 |
"DBD: driver for %s not available", cfg->name); |
"DBD: driver for %s not available", cfg->name); |
| 544 |
break; |
} |
| 545 |
case APR_EDSOOPEN: |
else if (APR_STATUS_IS_EDSOOPEN(rv)) { |
| 546 |
ap_log_error(APLOG_MARK, APLOG_ERR, rv, cfg->server, |
ap_log_error(APLOG_MARK, APLOG_ERR, rv, cfg->server, |
| 547 |
"DBD: can't find driver for %s", cfg->name); |
"DBD: can't find driver for %s", cfg->name); |
| 548 |
break; |
} |
| 549 |
case APR_ESYMNOTFOUND: |
else if (APR_STATUS_IS_ESYMNOTFOUND(rv)) { |
| 550 |
ap_log_error(APLOG_MARK, APLOG_ERR, rv, cfg->server, |
ap_log_error(APLOG_MARK, APLOG_ERR, rv, cfg->server, |
| 551 |
"DBD: driver for %s is invalid or corrupted", |
"DBD: driver for %s is invalid or corrupted", |
| 552 |
cfg->name); |
cfg->name); |
| 553 |
break; |
} |
| 554 |
default: |
else { |
| 555 |
ap_log_error(APLOG_MARK, APLOG_ERR, rv, cfg->server, |
ap_log_error(APLOG_MARK, APLOG_ERR, rv, cfg->server, |
| 556 |
"DBD: mod_dbd not compatible with APR in get_driver"); |
"DBD: mod_dbd not compatible with APR in get_driver"); |
|
break; |
|
| 557 |
} |
} |
|
|
|
| 558 |
apr_pool_destroy(rec->pool); |
apr_pool_destroy(rec->pool); |
| 559 |
return rv; |
return rv; |
| 560 |
} |
} |