<li><a href="#authdbmgroupfile">AuthDBMGroupFile</a></li>
<li><a href="#authdbmuserfile">AuthDBMUserFile</a></li>
+ <li><a href="#authdbmtype">AuthDBMType</a></li>
<li><a
href="#authdbmauthoritative">AuthDBMAuthoritative</a></li>
href="#authdbmgroupfile">AuthDBMGroupFile</a>.
<hr />
+ <h2><a id="authdbmtype"
+ name="authdbmtype">AuthDBMType</a></h2>
+ <!--%plaintext <?INDEX {\tt AuthDBMType} directive> -->
+ <a href="directive-dict.html#Syntax"
+ rel="Help"><strong>Syntax:</strong></a> AuthDBMType
+ <em>type of DBM being used</em><br />
+ <a href="directive-dict.html#Default"
+ rel="Help"><strong>Default:</strong></a>
+<code>AuthDBMType default</code>(which sets it to the default DBM compiled in)<br />
+
+ <a href="directive-dict.html#Context"
+ rel="Help"><strong>Context:</strong></a> directory,
+ .htaccess<br />
+ <a href="directive-dict.html#Override"
+ rel="Help"><strong>Override:</strong></a> AuthConfig<br />
+ <a href="directive-dict.html#Status"
+ rel="Help"><strong>Status:</strong></a> Extension<br />
+ <a href="directive-dict.html#Module"
+ rel="Help"><strong>Module:</strong></a> mod_auth_dbm
+<p>Setting this directive allows the user to change the type of DBM file which holds the user data. Current valid values are (SDBM | GDBM | DB) these may not all be available on your system</p>
+ <hr />
<h2><a id="authdbmauthoritative"
name="authdbmauthoritative">AuthDBMAuthoritative</a></h2>
<!--%plaintext <?INDEX {\tt AuthDBMAuthoritative} directive> -->
#define APR_WANT_STRFUNC
#include "apr_want.h"
+#include "apr_strings.h"
#if defined(AP_AUTH_DBM_USE_APR)
#include "apr_dbm.h"
#define DBM apr_dbm_t
#define datum apr_datum_t
-#define dbm_open apr_dbm_open
-#define dbm_fetch apr_dbm_fetch
+
#define dbm_close apr_dbm_close
#else
#include <ndbm.h>
char *auth_dbmpwfile;
char *auth_dbmgrpfile;
+ char *auth_dbmtype;
int auth_dbmauthoritative;
} dbm_auth_config_rec;
conf->auth_dbmpwfile = NULL;
conf->auth_dbmgrpfile = NULL;
- conf->auth_dbmauthoritative = 1; /* fortress is secure by default */
+ conf->auth_dbmtype ="default";
+ conf->auth_dbmauthoritative = 1; /* fortress is secure by default */
return conf;
}
return ap_set_file_slot(cmd, offset, f);
}
+static const char *set_dbm_type(cmd_parms *cmd,
+ void *dir_config,
+ const char *arg)
+{
+ dbm_auth_config_rec *conf = dir_config;
+
+ conf->auth_dbmtype = apr_pstrdup(cmd->pool ,arg);
+ return NULL;
+}
+
+
static const command_rec dbm_auth_cmds[] =
{
AP_INIT_TAKE1("AuthDBMUserFile", ap_set_file_slot,
AP_INIT_TAKE12("AuthGroupFile", set_dbm_slot,
(void *) APR_XtOffsetOf(dbm_auth_config_rec, auth_dbmgrpfile),
OR_AUTHCFG, NULL),
+
+ AP_INIT_TAKE1("AuthDBMType", set_dbm_type,
+ NULL,
+ OR_AUTHCFG, "what type of DBM file the user file is"),
+
AP_INIT_FLAG("AuthDBMAuthoritative", ap_set_flag_slot,
(void *) APR_XtOffsetOf(dbm_auth_config_rec, auth_dbmauthoritative),
OR_AUTHCFG, "Set to 'no' to allow access control to be passed along to lower modules, if the UserID is not known in this module"),
module AP_MODULE_DECLARE_DATA auth_dbm_module;
-static char *get_dbm_pw(request_rec *r, char *user, char *auth_dbmpwfile)
+static char *get_dbm_pw(request_rec *r,
+ char *user,
+ char *auth_dbmpwfile,
+ char*dbtype)
{
DBM *f;
datum d, q;
#endif
#ifdef AP_AUTH_DBM_USE_APR
- if (!(retval = dbm_open(&f, auth_dbmpwfile, APR_DBM_READONLY, APR_OS_DEFAULT, r->pool))) {
+ retval = apr_dbm_open_ex(&f, dbtype, auth_dbmpwfile, APR_DBM_READONLY, APR_OS_DEFAULT, r->pool);
+ if (retval != APR_SUCCESS) {
ap_log_rerror(APLOG_MARK, APLOG_ERR, retval, r,
- "could not open sdbm auth file: %s", auth_dbmpwfile);
- return NULL;
+ "could not open dbm (type %s) auth file: %s", dbtype, auth_dbmpwfile);
+ return NULL;
}
- if (dbm_fetch(f, q, &d) == APR_SUCCESS)
+ if (apr_dbm_fetch(f, q, &d) == APR_SUCCESS)
/* sorry for the obscurity ... falls through to the
* if (d.dptr) { block ...
*/
#else
if (!(f = dbm_open(auth_dbmpwfile, O_RDONLY, 0664))) {
ap_log_rerror(APLOG_MARK, APLOG_ERR, errno, r,
- "could not open dbm auth file: %s", auth_dbmpwfile);
- return NULL;
+ "could not open dbm auth file: %s", auth_dbmpwfile);
+ return NULL;
}
d = dbm_fetch(f, q);
* mark@telescope.org, 22Sep95
*/
-static char *get_dbm_grp(request_rec *r, char *user, char *auth_dbmgrpfile)
+static char *get_dbm_grp(request_rec *r, char *user, char *auth_dbmgrpfile, char*dbtype)
{
- char *grp_data = get_dbm_pw(r, user, auth_dbmgrpfile);
+ char *grp_data = get_dbm_pw(r, user, auth_dbmgrpfile,dbtype);
char *grp_colon;
char *grp_colon2;
if (!conf->auth_dbmpwfile)
return DECLINED;
- if (!(real_pw = get_dbm_pw(r, r->user, conf->auth_dbmpwfile))) {
+ if (!(real_pw = get_dbm_pw(r, r->user, conf->auth_dbmpwfile,conf->auth_dbmtype))) {
if (!(conf->auth_dbmauthoritative))
return DECLINED;
ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
const char *orig_groups, *groups;
char *v;
- if (!(groups = get_dbm_grp(r, user, conf->auth_dbmgrpfile))) {
+ if (!(groups = get_dbm_grp(r, user, conf->auth_dbmgrpfile,conf->auth_dbmtype))) {
if (!(conf->auth_dbmauthoritative))
return DECLINED;
ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,